Önemli Notlar

  • Yanında Değiştirmeyin ibaresi bulunan hiçbir kodu ve/veya satırı değiştirmeyin.
  • Yazılardakı ve kodlardaki açıklamaları dikkatlice okuyun.
  • Kodların sırasını mümkün olduğunca değiştirmeyin. Aksi taktirde hata ile karşılaşabilirsiniz.
  • Paketler bölümünde, gerekli R paketlerini bu belgede kodu verilmiş Load.Install fonksiyonunu kullanarak indirin ve yükleyin.
  • Seed bölümünde, istediğiniz sayıyı kullanabilirsiniz. Rassal olarak seçilen değerler, eğer varsa, seçtiğiniz sayıya göre değişecektir.
  • R hakkında daha fazla bilgi için, benim yazdığım R mini BootCamp adlı İngilizce kaynaktan faydalanabilirsiniz.

1 Hazırlık

1.1 Paketler

  • R paketlerini Load.Install fonksiyonunu kullanarak indirin ve/veya yükleyin.
# Devtools paketinin yüklenmesi
## Load.Install fonksiyonunun çalışması için devtools paketi gereklidir.
if("devtools" %in% rownames(installed.packages()) == FALSE) {suppressWarnings(install.packages("devtools"))}
suppressWarnings(library("devtools"))

# Gerekli paketlerin yüklenmesi.
## Paketleri yüklemeden önce Load.Install fonksiyonunun yüklenip çalıştığından emin olun.
Load.Install(c("rstudioapi", "readxl", "plyr", "dplyr", "tidyr", "stringr", "stringi", "Hmisc", "reshape2", "scales", "lubridate", "ggplot2", "xtable", "DT", "latex2exp", "forecast", "WDI", "fpp2", "fpp3", "datasets", "quantmod", "FinYang/tsdl", "ggseas", "slider", "ecm"))

1.2 Seed

  • Aşağıdaki R kodu bölümünde istediğiniz sayıyı girebilirsiniz.
set.seed(1234)

1.3 Çalışma Klasörü

  • Aşağıdaki R kodu, R çalışma klasörünü (yani working directory) sadece bu dosya için, bu dosyanın bilgisayarınızda bulunan lokasyonunda belirliyor.
    • getwd() fonksiyonunu kullanarak mevcut çalışma klasörünün hangi lokasyonda belirlendiğine bakabilirsiniz.
# Değiştirmeyin.
main.path <- dirname(rstudioapi::getActiveDocumentContext()$path) ## Bu kod otomatik olarak kaynak dosyasının, yani üzerinde çalıştığınız dosyanın, bilgisayarınızda hangi lokasyonda olduğunu buluyor.
setwd(paste0(main.path)) ## Yeni çalışma klasörü (yani working directory) bu kaynak dosyasının lokasyonunda belirleniyor.

2 Veri Yükleme

  • Bu bölümde zaman serileri verisinin farklı kaynaklardan yüklenmesi gösterilecektir.

2.1 World Bank Verisi

  • World Bank’ten direkt olarak WDI R paketini kullanarak veri indirip yüklemeye çalışalım.
  • World Bank’ten veri indirip yüklemek için temel olarak 2 fonksiyonu kullanacağız: WDIsearch ve WDI.
    • WDIsearch fonksiyonu ile indirip yüklemek istediğimiz veriyi belirleyebiliriz.
    • WDI fonksiyonu ile belirlediğimiz veriyi indirip yükleyebiliriz.
  • Örnek olması açısından “Türkiye için Nominal Gayri Safi Yurtiçi Hasıla” verisini TL cinsinden indirip yükleyelim.
  • Daha sonra indirip yüklediğimiz bu veriyi temizleyelim ve düzenleyelim.
  • Son olarak temizlenmiş ve düzenlemiş veriyi grafiğe dökelim.
WDIsearch(string = "gdp.*current.*LCU", field = "name", short = TRUE, cache = NULL) ## Olası seriler ve kodları. Biz "NY.GDP.MKTP.CN" GDP (current LCU) datasını kullanacağız.
#>      indicator           name                                                      
#> [1,] "NV.SRV.DISC.CN"    "Discrepancy in GDP, value added (current LCU)"           
#> [2,] "NY.GDP.DISC.CN"    "Discrepancy in expenditure estimate of GDP (current LCU)"
#> [3,] "NY.GDP.MKTP.CN"    "GDP (current LCU)"                                       
#> [4,] "NY.GDP.MKTP.CN.AD" "GDP: linked series (current LCU)"                        
#> [5,] "NY.GDP.PCAP.CN"    "GDP per capita (current LCU)"                            
#> [6,] "NYGDPMKTPSACN"     "GDP,current LCU,millions,seas. adj.,"
data <- WDI(country = c("TR"), indicator = c("NY.GDP.MKTP.CN"), start = 1960, end = 2019, extra = FALSE) ## Bir önceki kodda belirlediğimiz indikatör ismini ve ülke kısaltmasını kullanıyoruz. Datanın başlangıç ve bitiş tarihlerini de ayrı ayrı belirtiyoruz.
data ## Datanın yapısını inceleyelim.
data <- data[, c("year", "NY.GDP.MKTP.CN")] ## İstediğimiz değişkenleri belirtiyoruz.
colnames(data) <- c("Year", "GDP") ## Değişkenlere yeni isimler veriyoruz.
data$Date <- as.Date(paste(data$Year, "1", "1", sep = "-")) ## Date adlı yeni bir değişken oluşturuyoruz.
data <- data[, c("Date", "Year", "GDP")] ## Değişkenleri sütun olarak sıralıyoruz.
data <- data[order(data$Date, data$Year, decreasing = FALSE, na.last = FALSE), ] ## Datayı tarihe göre sıralıyoruz.
rownames(data) <- 1:nrow(data) ## Satır sayılarını sıralıyoruz.
data ## Datanın yapısını inceleyelim.

# Grafik
temp <- data
variable <- "GDP"
variable.name <- "Nominal GSYH (TL)"

ggplot(temp) +
    geom_line(aes(x = Date, y = temp[ , variable], colour = "Variable"), linetype = 1, size = 1) +
    geom_point(aes(x = Date, y = temp[ , variable], colour = "Variable"), size = 1) +
    xlab("Zaman (Yıl)") + ylab(variable.name) +
    # labs(title = "Başlık") + ## Grafik için isterseniz başlık eklenebilir.
    scale_x_date(date_breaks = "5 year", date_labels = "%Y") +
    scale_colour_manual(name = "", labels = c(variable.name), values = c("Variable" = "darkblue")) +
    theme_grey() +
    theme(legend.position = "top")


2.2 R Paketleri Verisi

  • Bazı R paketlerinde mevcut olan veriyi direkt olarak yüklemeye çalışalım.
  • İndirdiğiniz ve daha sonra yüklediğiniz R paketleri içerisindeki veriyi genellikle çok basit birkaç fonksiyonu kullanarak R’ın içine yükleyebilirsiniz.
    • R paketi içinden veri yüklemek genellikle verinin paket içindeki ismi ve data fonksiyonu kullanılarak yapılır. Örneğin: fpp2 Paketi Verisi bölümünde, paket içindeki verinin ismi ve data fonksiyonu kullanılarak istenilen veri yüklenmiştir.
    • Bazı R paketlerinde ise verinin belli bir ismi olmadığından, yüklenmek istenilen veri paket içinden belirli fonksiyonlar kullanılarak seçilmelidir. Örneğin: tsdl Paketi Verisi bölümünde, paket içindeki verinin ismi belli olmadığından farklı birkaç fonksiyon kullanılarak istenilen veri yüklenmiştir.
  • R paketlerinin içinde olan verileri toplu olarak görmek için Vincent Arel-Bundock tarafından hazırlanan web sitesini inceleyebilirsiniz.

2.2.1 fpp2 Paketi Verisi

  • R paketlerinde mevcut olan veriyi, verinin ismini kullanarak yüklemek için 1 fonksiyon kullanacağız: data.
    • data fonksiyonu ile istediğimiz veriyi verinin R paketi içindeki ismini kullanarak direkt olarak R’ın içine yükleyebiliriz.
  • Örnek olması açısından fpp2 R paketinden “Avustralya Elektrik Üretimi (milyar kWh)” verisini yükleyelim.
    • fpp2 R paketinden yüklemek istediğimiz verinin ismi qauselec’tir.
  • Daha sonra yüklediğimiz bu veriyi temizleyelim ve düzenleyelim.
  • Son olarak temizlenmiş ve düzenlemiş veriyi grafiğe dökelim.
data(qauselec) ## Datayı yüklüyoruz.
data <- qauselec ## Yüklediğimiz datayı "data" ismi ile kaydediyoruz.
head(data, 20) ## Datanın yapısını inceleyelim. İlk 20 gözlemin gösterilmesini istedik.
#>       Qtr1  Qtr2  Qtr3  Qtr4
#> 1956 3.923 4.436 4.806 4.418
#> 1957 4.339 4.811 5.259 4.735
#> 1958 4.608 5.196 5.609 4.977
#> 1959 4.883 5.744 6.035 5.514
#> 1960 5.387 6.211 6.659 5.983
data <- data.frame(Date = as.Date(date_decimal(as.numeric(time(data)))), Elec.Prod = as.matrix(data), stringsAsFactors = FALSE) ## Yüklediğimiz data time series formatında olduğu için bu datayı data.frame formatına çeviriyoruz.
data ## Datanın yapısını inceleyelim.
data <- data[order(data$Date, decreasing = FALSE, na.last = FALSE), ] ## Datayı tarihe göre sıralıyoruz.
rownames(data) <- 1:nrow(data) ## Satır sayılarını sıralıyoruz.
data ## Datanın yapısını inceleyelim.

# Grafik
temp <- data
variable <- "Elec.Prod"
variable.name <- "Avustralya Elektrik Üretimi (milyar kWh)"

ggplot(temp) +
    geom_line(aes(x = Date, y = temp[ , variable], colour = "Variable"), linetype = 1, size = 1) +
    xlab("Zaman (Çeyreklik)") + ylab(variable.name) +
    # labs(title = "Başlık") + ## Grafik için isterseniz başlık eklenebilir.
    scale_x_date(date_breaks = "5 year", date_labels = "%Y") +
    scale_colour_manual(name = "", labels = c(variable.name), values = c("Variable" = "darkblue")) +
    theme_grey() +
    theme(legend.position = "top")

2.2.2 tsdl Paketi Verisi

  • R paketlerinde mevcut olan veriyi, verinin ismini bilmeden yüklemek için 1 fonksiyon kullanacağız: subset
    • subset fonksiyonu ile istediğimiz veriyi verinin R paketi içindeki ismini kullanmadan direkt olarak R’ın içine yükleyebiliriz.
  • Örnek olması açısından tsdl R paketinden, veriyi adım adım ilerleyerek önce belirleyelim ve sonra yükleyelim.
  • tsdl R paketindeki tüm verilerin zaman serisi formatında, yani ts(), olduğu unutulmamalıdır.
  • Son olarak yüklediğimiz bu veriyi grafiğe dökelim.
Load.Install("tsdl")
tsdl ## tsdl paketinin içinde bulunan verilerin konulara ve frekansa göre kategorisi. Daha sonra bu obje datanın yüklenmesi için kullanılacaktır.
#> Time Series Data Library: 648 time series  
#> 
#>                        Frequency
#> Subject                 0.1 0.25   1   4   5   6  12  13  52 365 Total
#>   Agriculture             0    0  37   0   0   0   3   0   0   0    40
#>   Chemistry               0    0   8   0   0   0   0   0   0   0     8
#>   Computing               0    0   6   0   0   0   0   0   0   0     6
#>   Crime                   0    0   1   0   0   0   2   1   0   0     4
#>   Demography              1    0   9   2   0   0   3   0   0   2    17
#>   Ecology                 0    0  23   0   0   0   0   0   0   0    23
#>   Finance                 0    0  23   5   0   0  20   0   2   1    51
#>   Health                  0    0   8   0   0   0   6   0   1   0    15
#>   Hydrology               0    0  42   0   0   0  78   1   0   6   127
#>   Industry                0    0   9   0   0   0   2   0   1   0    12
#>   Labour market           0    0   3   4   0   0  17   0   0   0    24
#>   Macroeconomic           0    0  18  33   0   0   5   0   0   0    56
#>   Meteorology             0    0  18   0   0   0  17   0   0  12    47
#>   Microeconomic           0    0  27   1   0   0   7   0   1   0    36
#>   Miscellaneous           0    0   4   0   1   1   3   0   1   0    10
#>   Physics                 0    0  12   0   0   0   4   0   0   0    16
#>   Production              0    0   4  14   0   0  28   1   1   0    48
#>   Sales                   0    0  10   3   0   0  24   0   9   0    46
#>   Sport                   0    1   1   0   0   0   0   0   0   0     2
#>   Transport and tourism   0    0   1   1   0   0  12   0   0   0    14
#>   Tree-rings              0    0  34   0   0   0   1   0   0   0    35
#>   Utilities               0    0   2   1   0   0   8   0   0   0    11
#>   Total                   1    1 300  64   1   1 240   3  16  21   648
datatable(meta_tsdl, filter = "top", options = list(pageLength = 5, autoWidth = TRUE)) ## tsdl paketinin içinde bulunan verilerin metadatası (bilgisi). Bu tabloya bakarak istediğimız datayı sıra numarasını kullanarak ya da diğer başka fonksiyonları kullanarak seçebiliriz.
# İstenilen datanın yüklenmesi.
## İstediğimiz data 134. sırada bulunan: Monthly Australian imports from Japan: thousands of dollars. Jul 65 – Oct 93.
data <- subset(tsdl, description = "Monthly Australian imports from Japan")[[1]] ## Alternatif olarak datayı bu şekilded yükleyebiliriz.
data <- tsdl[[134]] ## Sıra numarası kullanarak datayı yüklüyoruz. Bu datanın zaman serisi objesi olduğuna dikkat edin.
head(data, 30) ## Datanın yapısını inceleyelim.
#>        Jan   Feb   Mar   Apr   May   Jun   Jul   Aug   Sep   Oct   Nov   Dec
#> 1965                                     27418 30592 23910 25509 27003 20943
#> 1966 25333 17004 20249 21384 19565 21253 23041 23026 23860 22295 27286 23928
#> 1967 29008 18387 26340 21437 27105 30316 22101 34180 32133 29867 27710 25342

# Grafik
## Elimizdeki veri zaman serisi objesi olduğu için plot fonksiyonunu kullanarak direkt olarak grafiğe dökebiliriz.
plot(data)


2.3 Excel Verisi

  • Excel dosyasından direkt olarak veri yüklemeye çalışalım.
  • Excel dosyasından veri yüklemek için 1 fonksiyon kullanacağız: read_excel.
    • read_excel fonksiyonu ile veriyi direkt olarak R’ın içine yükleyebiliriz.
  • Örnek olması açısından “İstanbul’a Verilen Temiz Su Miktarları” verisini yükleyelim.
  • Daha sonra yüklediğimiz bu veriyi temizleyelim ve düzenleyelim.
  • Son olarak temizlenmiş ve düzenlemiş veriyi grafiğe dökelim.
file.path <- "clean-water.xlsx" ## Data dosyasının ismi ve uzantısı.

# Ham datanın yüklenmesi
data <- read_excel(path = file.path, sheet = 3, range = cell_limits(c(1, 1), c(NA, NA)), col_names = TRUE, col_types = "text") ## Yüklediğimiz datayı tibble formatında kaydediyoruz.
data <- as.data.frame(data, stringsAsFactors = FALSE) ## Datayı data.frame formatına çeviriyoruz.
data ## Datanın yapısını inceleyelim.
colnames(data)[1] <- "Month" ## İlk sütun ismini değiştiriyoruz.
data$Month <- 1:12 ## İlk sütundaki hücrelere ay ismi yerine rakam veriyoruz.

# Datanın dönüştürülmesi.
data <- reshape2::melt(data, id.vars = c("Month"), variable_name = "value")

# Bazı değişiklikler.
data <- dplyr::rename(data, Year = variable)
data <- dplyr::rename(data, Clean.Water = value)
data$Year <- as.numeric(as.character(data$Year))
data$Clean.Water <- as.numeric(data$Clean.Water)
data$Date <- as.Date(paste(data$Year, data$Month, "1", sep = "-")) ## Date adlı tarihi belirten yeni bir değişken oluşturuyoruz.
data <- data[, c("Date", "Year", "Month", "Clean.Water")] ## İstediğimiz değişkenleri belirtiyoruz.
data <- data[data$Year != 2019, ] ## 2019 datasının son gözleminde bir problem olduğu için 2019 yılını siliyoruz.
data <- data[order(data$Date, decreasing = FALSE, na.last = FALSE), ] ## Datayı tarihe göre sıralıyoruz.
rownames(data) <- 1:nrow(data) ## Satır sayılarını sıralıyoruz.
data ## Datanın yapısını inceleyelim.

# Grafik
temp <- data
variable <- "Clean.Water"
variable.name <- "İstanbul'a Verilen Temiz Su Miktarı (Ton)"

ggplot(temp) +
    geom_line(aes(x = Date, y = temp[ , variable], colour = "Variable"), linetype = 1, size = 1) +
    xlab("Zaman (Ay)") + ylab(variable.name) +
    # labs(title = "Başlık") + ## Grafik için isterseniz başlık eklenebilir.
    scale_x_date(date_breaks = "1 year", date_labels = "%Y") +
    scale_colour_manual(name = "", labels = c(variable.name), values = c("Variable" = "darkblue")) +
    theme_grey() +
    theme(legend.position = "top")


2.4 CSV Verisi

  • CSV dosyasından den direkt olarak veri yüklemeye çalışalım.
  • CSV dosyasından veri yüklemek için 1 fonksiyon kullanacağız: read.csv.
    • read.csv fonksiyonu ile veriyi direkt olarak R’ın içine yükleyebiliriz.
  • Örnek olması açısından “İstanbul Barajlarinin Doluluk Oranları” verisini yükleyelim.
  • Daha sonra yüklediğimiz bu veriyi temizleyelim ve düzenleyelim.
  • Son olarak temizlenmiş ve düzenlemiş veriyi grafiğe dökelim.
file.path <- "dam_occupancy.csv" ## Data dosyasının ismi ve uzantısı.

# Ham datanın yüklenmesi
data <- read.csv(file = file.path, header = TRUE, sep = ",", dec = ".", colClasses = "character", comment.char = "", na.string = "") ## Datanın yüklenmesi.
data ## Datanın yapısını inceleyelim.
colnames(data) <- c("Date", "Occupancy.Rate", "Reserved.Water") ## Sütun isimlerinin değiştirilmesi.
data$Occupancy.Rate <- as.numeric(data$Occupancy.Rate) ## Numerik kategori olarak değiştirildi.
data$Reserved.Water <- as.numeric(data$Reserved.Water) ## Numerik kategori olarak değiştirildi.
data$Date <- as.Date(data$Date, tz = "UTC", format = "%Y-%m-%d") ## Date kategori olarak değiştirildi.
data <- data[order(data$Date, decreasing = FALSE, na.last = FALSE), ] ## Datayı tarihe göre sıralıyoruz.
rownames(data) <- 1:nrow(data) ## Satır sayılarını sıralıyoruz.
data ## Datanın yapısını inceleyelim.

# Grafik
temp <- data
variable <- "Occupancy.Rate"
variable.name <- "İstanbul Barajları Doluluk Oranı"

ggplot(temp) +
    geom_line(aes(x = Date, y = temp[ , variable], colour = "Variable"), linetype = 1, size = 1) +
    xlab("Zaman (Gün)") + ylab(variable.name) +
    # labs(title = "Başlık") + ## Grafik için isterseniz başlık eklenebilir.
    scale_x_date(date_breaks = "1 year", date_labels = "%Y") +
    scale_colour_manual(name = "", labels = c(variable.name), values = c("Variable" = "darkblue")) +
    theme_grey() +
    theme(legend.position = "top")


2.5 Yahoo Finance Verisi

  • Yahoo Finance’ten direkt olarak quantmod R paketini kullanarak veri indirip yüklemeye çalışalım.
  • Yahoo Finance’ten veri indirip yüklemek için 1 fonksiyon kullanacağız: loadSymbols.
    • loadSymbols fonksiyonu ile istediğimiz veriyi direkt olarak R’ın içine yükleyebiliriz.
  • Örnek olması açısından “Google Hisse Senedi Fiyatı” verisini indirip yükleyelim.
  • Daha sonra indirip yüklediğimiz bu veriyi temizleyelim ve düzenleyelim.
  • Son olarak temizlenmiş ve düzenlemiş veriyi grafiğe dökelim.
loadSymbols(Symbols = "GOOG", periodicity = "daily", return.class = "data.frame") ## Yahoo Finance uzerinden buldugumuz sembolu (GOOG) kullanarak ve datanın frekansını seçerek datayı indirip yükleyebiliriz. İndirdiğimiz datanın ismi sembol ismi ile aynı olacaktır.
#> 'getSymbols' currently uses auto.assign=TRUE by default, but will
#> use auto.assign=FALSE in 0.5-0. You will still be able to use
#> 'loadSymbols' to automatically load data. getOption("getSymbols.env")
#> and getOption("getSymbols.auto.assign") will still be checked for
#> alternate defaults.
#> 
#> This message is shown once per session and may be disabled by setting 
#> options("getSymbols.warning4.0"=FALSE). See ?getSymbols for details.
#> [1] "GOOG"
GOOG ## Datanın yapısını inceleyelim.

data <- data.frame(Date = rownames(GOOG), Google = GOOG$GOOG.Close, stringsAsFactors = FALSE) ## Kapanış fiyatları seçiliyor ve sütun ismi olarak Google veriliyor.
data$Date <- as.Date(data$Date) ## Date kategori olarak değiştiriliyor.
data <- data[order(data$Date, decreasing = FALSE, na.last = FALSE), ] ## Datayı tarihe göre sıralıyoruz.
rownames(data) <- 1:nrow(data) ## Satır sayılarını sıralıyoruz.
data ## Datanın yapısını inceleyelim.

# Grafik
temp <- data
variable <- "Google"
variable.name <- "Google Hisse Senedi Fiyatı"

ggplot(temp) +
    geom_line(aes(x = Date, y = temp[ , variable], colour = "Variable"), linetype = 1, size = 1) +
    xlab("Zaman (Gün)") + ylab(variable.name) +
    # labs(title = "Başlık") + ## Grafik için isterseniz başlık eklenebilir.
    scale_x_date(date_breaks = "1 year", date_labels = "%Y") +
    scale_colour_manual(name = "", labels = c(variable.name), values = c("Variable" = "darkblue")) +
    theme_grey() +
    theme(legend.position = "top")


3 Verinin Hazırlanması

  • Bu bölümde zaman serileri verisinin hazırlanması için uygulanabilecek teknikler farklı kaynaklardan veriler kullanılarak gösterilecektir.

3.1 Enflasyon Ayarlaması

  • Örnek olması açısından World Bank’ten “Türkiye için Nominal Gayri Safi Yurtiçi Hasıla” verisini TL cinsinden ve “Türkiye için Gayri Safi Yurtiçi Hasıla Deflatörü (2009 Baz Yılı)” verisini beraber indirip yükleyelim.
  • Daha sonra indirip yüklediğimiz bu veriyi temizleyelim ve düzenleyelim.
  • Daha sonra temizlenmiş ve düzenlenmiş verinin enflasyon ayarlamasını yapalım.
  • Son olarak enflasyon ayarlaması yapılmış veriyi grafiğe dökelim.
WDIsearch(string = "gdp.*current.*LCU", field = "name", short = TRUE, cache = NULL) ## Olası seriler ve kodları. Biz "NY.GDP.MKTP.CN" GDP (current LCU) datasını kullanacağız.
#>      indicator           name                                                      
#> [1,] "NV.SRV.DISC.CN"    "Discrepancy in GDP, value added (current LCU)"           
#> [2,] "NY.GDP.DISC.CN"    "Discrepancy in expenditure estimate of GDP (current LCU)"
#> [3,] "NY.GDP.MKTP.CN"    "GDP (current LCU)"                                       
#> [4,] "NY.GDP.MKTP.CN.AD" "GDP: linked series (current LCU)"                        
#> [5,] "NY.GDP.PCAP.CN"    "GDP per capita (current LCU)"                            
#> [6,] "NYGDPMKTPSACN"     "GDP,current LCU,millions,seas. adj.,"
WDIsearch(string = "gdp.*deflator", field = "name", short = TRUE, cache = NULL) ## Olası seriler ve kodları. Biz "NY.GDP.DEFL.ZS" GDP deflator (base year varies by country) datasını kullanacağız. 2009 baz yılı kullanılıyor.
#>       indicator              name                                                       
#>  [1,] "NY.GDP.DEFL.87.ZG"    "Inflation, GDP deflator (annual %)"                       
#>  [2,] "NY.GDP.DEFL.KD.ZG"    "Inflation, GDP deflator (annual %)"                       
#>  [3,] "NY.GDP.DEFL.KD.ZG.AD" "Inflation, GDP deflator: linked series (annual %)"        
#>  [4,] "NY.GDP.DEFL.ZS"       "GDP deflator (base year varies by country)"               
#>  [5,] "NY.GDP.DEFL.ZS.87"    "GDP deflator (1987 = 100)"                                
#>  [6,] "NY.GDP.DEFL.ZS.AD"    "GDP deflator: linked series (base year varies by country)"
#>  [7,] "NY.GDP.MKTP.CD.XD"    "GDP deflator, index (2000=100; US$ series)"               
#>  [8,] "NY.GDP.MKTP.CN.XD"    "GDP deflator, period average (LCU index 2000=100)"        
#>  [9,] "NY.GDP.MKTP.IN"       "GDP Deflator"                                             
#> [10,] "NY.GDP.MKTP.XD"       "GDP deflator (1987=100,Index)"                            
#> [11,] "NY.GDP.MKTP.XU.E"     "GDP deflator, end period (base year varies by country)"
data <- WDI(country = c("TR"), indicator = c("NY.GDP.MKTP.CN", "NY.GDP.DEFL.ZS"), start = 1960, end = 2019, extra = FALSE) ## Bir önceki kodda belirlediğimiz indikatör isimlerini ve ülke kısaltmasını kullanıyoruz. Datanın başlangıç ve bitiş tarihlerini de ayrı ayrı belirtiyoruz.
data ## Datanın yapısını inceleyelim.
data <- data[, c("year", "NY.GDP.MKTP.CN", "NY.GDP.DEFL.ZS")] ## İstediğimiz değişkenleri belirtiyoruz.
colnames(data) <- c("Year", "GDP", "GDP.Deflator") ## Değişkenlere yeni isimler veriyoruz.
data$Date <- as.Date(paste(data$Year, "1", "1", sep = "-")) ## Date adlı yeni bir değişken oluşturuyoruz.
data <- data[, c("Date", "Year", "GDP", "GDP.Deflator")] ## Değişkenleri sütun olarak sıralıyoruz.
data <- data[order(data$Date, data$Year, decreasing = FALSE, na.last = FALSE), ] ## Datayı tarihe göre sıralıyoruz.
rownames(data) <- 1:nrow(data) ## Satır sayılarını sıralıyoruz.
data ## Datanın yapısını inceleyelim.

# Enflasyon ayarlaması.
data[data$GDP.Deflator == 100, "Year"] ## Datanin baz yılı belirleniyor. 2009 yılı.
#> [1] 2009
data$R.GDP <- (data$GDP / data$GDP.Deflator) * 100 ## Enflasyon ayarlaması yapılıyor.
data ## Datanın yapısını inceleyelim.

# Grafik
temp <- data
variable <- "R.GDP"
variable.name <- "Real GSYH (2009 TL)"

ggplot(temp) +
    geom_line(aes(x = Date, y = temp[ , variable], colour = "Variable"), linetype = 1, size = 1) +
    geom_point(aes(x = Date, y = temp[ , variable], colour = "Variable"), size = 1) +
    xlab("Zaman (Yıl)") + ylab(variable.name) +
    # labs(title = "Başlık") + ## Grafik için isterseniz başlık eklenebilir.
    scale_x_date(date_breaks = "5 year", date_labels = "%Y") +
    scale_colour_manual(name = "", labels = c(variable.name), values = c("Variable" = "darkblue")) +
    theme_grey() +
    theme(legend.position = "top")


3.2 Nüfus Ayarlaması

  • Örnek olması açısından World Bank’ten “Türkiye için Reel Gayri Safi Yurtiçi Hasıla (2009 Baz Yılı)” verisini TL cinsinden ve “Türkiye için Nüfus” verisini beraber indirip yükleyelim.
  • Daha sonra indirip yüklediğimiz bu veriyi temizleyelim ve düzenleyelim.
  • Daha sonra temizlenmiş ve düzenlenmiş verinin nüfus ayarlamasını yapalım.
  • Son olarak nüfus ayarlaması yapılmış veriyi grafiğe dökelim.
WDIsearch(string = "gdp.*constant.*LCU", field = "name", short = TRUE, cache = NULL) ## Olası seriler ve kodları. Biz "NY.GDP.MKTP.KN" GDP (constant LCU) datasını kullanacağız. 2009 baz yılı kullanılıyor.
#>      indicator           name                                                       
#> [1,] "NV.SRV.DISC.KN"    "Discrepancy in GDP, value added (constant LCU)"           
#> [2,] "NY.GDP.DISC.KN"    "Discrepancy in expenditure estimate of GDP (constant LCU)"
#> [3,] "NY.GDP.FCST.KN.87" "GDP at factor cost (constant 1987 LCU)"                   
#> [4,] "NY.GDP.MKTP.KN"    "GDP (constant LCU)"                                       
#> [5,] "NY.GDP.MKTP.KN.87" "GDP at market prices (constant 1987 LCU)"                 
#> [6,] "NY.GDP.PCAP.KN"    "GDP per capita (constant LCU)"                            
#> [7,] "NYGDPMKTPSAKN"     "GDP,constant 2010 LCU,millions,seas. adj.,"
WDIsearch(string = "SP.POP.TOTL", field = "name", short = TRUE, cache = NULL) ## Olası seriler ve kodları. Biz "SP.POP.TOTL" Total Population datasını kullanacağız.
#>      indicator            name                                              
#> [1,] "SP.POP.TOTL.ICP"    "SP.POP.TOTL.ICP:Population"                      
#> [2,] "SP.POP.TOTL.ICP.ZS" "SP.POP.TOTL.ICP.ZS:Population shares (World=100)"
data <- WDI(country = c("TR"), indicator = c("NY.GDP.MKTP.KN", "SP.POP.TOTL"), start = 1960, end = 2019, extra = FALSE) ## Bir önceki kodda belirlediğimiz indikatör isimlerini ve ülke kısaltmasını kullanıyoruz. Datanın başlangıç ve bitiş tarihlerini de ayrı ayrı belirtiyoruz.
data ## Datanın yapısını inceleyelim.

data <- data[, c("year", "NY.GDP.MKTP.KN", "SP.POP.TOTL")] ## İstediğimiz değişkenleri belirtiyoruz.
colnames(data) <- c("Year", "R.GDP", "Population") ## Değişkenlere yeni isimler veriyoruz.
data$Date <- as.Date(paste(data$Year, "1", "1", sep = "-")) ## Date adlı yeni bir değişken oluşturuyoruz.
data <- data[, c("Date", "Year", "R.GDP", "Population")] ## Değişkenleri sütun olarak sıralıyoruz.
data <- data[order(data$Date, data$Year, decreasing = FALSE, na.last = FALSE), ] ## Datayı tarihe göre sıralıyoruz.
rownames(data) <- 1:nrow(data) ## Satır sayılarını sıralıyoruz.
data ## Datanın yapısını inceleyelim.

# Nüfus ayarlaması.
data$R.GDP.PCAP <- data$R.GDP / data$Population ## Nüfus ayarlaması yapılıyor.
data ## Datanın yapısını inceleyelim.

# Grafik
temp <- data
variable <- "R.GDP.PCAP"
variable.name <- "Kişi Başı Reel GSYH (2009 TL)"

ggplot(temp) +
    geom_line(aes(x = Date, y = temp[ , variable], colour = "Variable"), linetype = 1, size = 1) +
    geom_point(aes(x = Date, y = temp[ , variable], colour = "Variable"), size = 1) +
    xlab("Zaman (Yıl)") + ylab(variable.name) +
    # labs(title = "Başlık") + ## Grafik için isterseniz başlık eklenebilir.
    scale_x_date(date_breaks = "5 year", date_labels = "%Y") +
    scale_colour_manual(name = "", labels = c(variable.name), values = c("Variable" = "darkblue")) +
    theme_grey() +
    theme(legend.position = "top")


3.3 Kur Ayarlaması

  • Örnek olması açısından World Bank’ten “Türkiye için Kişi Başı Reel Gayri Safi Yurtiçi Hasıla (2009 Baz Yılı)” verisini TL cinsinden ve “TL/USD Döviz Kuru” verisini beraber indirip yükleyelim.
  • Daha sonra indirip yüklediğimiz bu veriyi temizleyelim ve düzenleyelim.
  • Daha sonra temizlenmiş ve düzenlenmiş veriyi USD cinsinden (Amerikan Dolarına çevirme) hesaplayıp kur ayarlaması yapalım.
  • Son olarak kur ayarlaması yapılmış veriyi grafiğe dökelim.
WDIsearch(string = "gdp.*capita.*constant.*LCU", field = "name", short = TRUE, cache = NULL) ## Olası seriler ve kodları. Biz "NY.GDP.PCAP.KN" GDP per capita (constant LCU) datasını kullanacağız. 2009 baz yılı kullanılıyor.
#>                       indicator                            name 
#>                "NY.GDP.PCAP.KN" "GDP per capita (constant LCU)"
WDIsearch(string = "exchange.*rate.*LCU", field = "name", short = TRUE, cache = NULL) ## Olası seriler ve kodları. Biz "PA.NUS.FCRF" Official exchange rate (LCU per US$, end period) datasını kullanacağız.
#>      indicator     name                                                              
#> [1,] "DPANUSLCU"   "Official exchange rate, LCU per USD, period average"             
#> [2,] "DPANUSSPB"   "Exchange rate, new LCU per USD extended backward, period average"
#> [3,] "DPANUSSPF"   "Exchange rate, old LCU per USD extended forward, period average" 
#> [4,] "PA.NUS"      "Exchange rate (LCU per US$, period average)"                     
#> [5,] "PA.NUS.FCRF" "Official exchange rate (LCU per US$, period average)"            
#> [6,] "PE.NUS.FCAE" "Official exchange rate (LCU per US$, end period)"
data <- WDI(country = c("TR"), indicator = c("NY.GDP.PCAP.KN", "PA.NUS.FCRF"), start = 2000, end = 2019, extra = FALSE) ## Bir önceki kodda belirlediğimiz indikatör isimlerini ve ülke kısaltmasını kullanıyoruz. Datanın başlangıç ve bitiş tarihlerini de ayrı ayrı belirtiyoruz.
data ## Datanın yapısını inceleyelim.

data <- data[, c("year", "NY.GDP.PCAP.KN", "PA.NUS.FCRF")] ## İstediğimiz değişkenleri belirtiyoruz.
colnames(data) <- c("Year", "R.GDP.PCAP", "Exchange.Rate") ## Değişkenlere yeni isimler veriyoruz.
data$Date <- as.Date(paste(data$Year, "1", "1", sep = "-")) ## Date adlı yeni bir değişken oluşturuyoruz.
data <- data[, c("Date", "Year", "R.GDP.PCAP", "Exchange.Rate")] ## Değişkenleri sütun olarak sıralıyoruz.
data <- data[order(data$Date, data$Year, decreasing = FALSE, na.last = FALSE), ] ## Datayı tarihe göre sıralıyoruz.
rownames(data) <- 1:nrow(data) ## Satır sayılarını sıralıyoruz.
data ## Datanın yapısını inceleyelim.

# Kur ayarlaması ayarlaması.
data$R.GDP.PCAP.USD <- data$R.GDP.PCAP / data$Exchange.Rate ## Nüfus ayarlaması yapılıyor.
data ## Datanın yapısını inceleyelim.

# Grafik
temp <- data
variable <- "R.GDP.PCAP.USD"
variable.name <- "Kişi Başı Reel GSYH (2009 USD)"

ggplot(temp) +
    geom_line(aes(x = Date, y = temp[ , variable], colour = "Variable"), linetype = 1, size = 1) +
    geom_point(aes(x = Date, y = temp[ , variable], colour = "Variable"), size = 1) +
    xlab("Zaman (Yıl)") + ylab(variable.name) +
    # labs(title = "Başlık") + ## Grafik için isterseniz başlık eklenebilir.
    scale_x_date(date_breaks = "5 year", date_labels = "%Y") +
    scale_colour_manual(name = "", labels = c(variable.name), values = c("Variable" = "darkblue")) +
    theme_grey() +
    theme(legend.position = "top")


3.4 Büyüme Oranı

  • Örnek olması açısından World Bank’ten “Türkiye için Kişi Başı Reel Gayri Safi Yurtiçi Hasıla (2010 Baz Yılı)” verisini USD cinsinden indirip yükleyelim.
  • Daha sonra indirip yüklediğimiz bu veriyi temizleyelim ve düzenleyelim.
  • Daha sonra temizlenmiş ve düzenlenmiş veri üzerinden büyüme oranı hesaplayalım.
  • Son olarak büyüme oranı hesaplanmış veriyi grafiğe dökelim.
WDIsearch(string = "gdp.*capita.*constant", field = "name", short = TRUE, cache = NULL) ## Olası seriler ve kodları. Biz "NY.GDP.PCAP.KD" GDP per capita (constant 2010 US$) datasını kullanacağız. 2010 baz yılı kullanılıyor.
#>      indicator              name                                                  
#> [1,] "6.0.GDPpc_constant"   "GDP per capita, PPP (constant 2011 international $) "
#> [2,] "NY.GDP.PCAP.KD"       "GDP per capita (constant 2010 US$)"                  
#> [3,] "NY.GDP.PCAP.KN"       "GDP per capita (constant LCU)"                       
#> [4,] "NY.GDP.PCAP.PP.KD"    "GDP per capita, PPP (constant 2017 international $)" 
#> [5,] "NY.GDP.PCAP.PP.KD.87" "GDP per capita, PPP (constant 1987 international $)"
data <- WDI(country = c("TR"), indicator = c("NY.GDP.PCAP.KD"), start = 1960, end = 2019, extra = FALSE) ## Bir önceki kodda belirlediğimiz indikatör ismini ve ülke kısaltmasını kullanıyoruz. Datanın başlangıç ve bitiş tarihlerini de ayrı ayrı belirtiyoruz.
data ## Datanın yapısını inceleyelim.

data <- data[, c("year", "NY.GDP.PCAP.KD")] ## İstediğimiz değişkenleri belirtiyoruz.
colnames(data) <- c("Year", "R.GDP.PCAP") ## Değişkenlere yeni isimler veriyoruz.
data$Date <- as.Date(paste(data$Year, "1", "1", sep = "-")) ## Date adlı yeni bir değişken oluşturuyoruz.
data <- data[, c("Date", "Year", "R.GDP.PCAP")] ## Değişkenleri sütun olarak sıralıyoruz.
data <- data[order(data$Date, data$Year, decreasing = FALSE, na.last = FALSE), ] ## Datayı tarihe göre sıralıyoruz.
rownames(data) <- 1:nrow(data) ## Satır sayılarını sıralıyoruz.
data ## Datanın yapısını inceleyelim.

# Büyüme oranı hesaplaniyor.
temp <- data ## Aşağıdaki dögünün işlemesi için datayı farklı bir isimle kaydedip onunla işlem yapıyoruz.
for (i in 3:ncol(temp)) {
    x <- temp[ , i]
    growth.x <- 100 * (diff(x, lag = 1, differences = 1) / x[-length(x)])
    growth.x <- round(growth.x, 3)
    x <- as.data.frame(c(NA, growth.x), stringsAsFactors = FALSE)
    colnames(x) <- paste0("Gr.", colnames(temp)[i]) ## Büyüme değerlerini "Gr." ile ifade ediyoruz.
    temp <- cbind(temp, x)
}
data <- temp ## Tekrar aynı ismi kullanmaya başlıyoruz.
data ## Datanın yapısını inceleyelim.

# Grafik
temp <- data
variable <- "Gr.R.GDP.PCAP"
variable.name <- "Kişi Başı Reel GSYH Büyüme Oranı (USD)"

ggplot(temp) +
    geom_line(aes(x = Date, y = temp[ , variable], colour = "Variable"), linetype = 1, size = 1) +
    geom_point(aes(x = Date, y = temp[ , variable], colour = "Variable"), size = 1) +
    xlab("Zaman (Yıl)") + ylab(variable.name) +
    # labs(title = "Başlık") + ## Grafik için isterseniz başlık eklenebilir.
    scale_x_date(date_breaks = "5 year", date_labels = "%Y") +
    geom_hline(aes(yintercept = 0), show.legend = FALSE, linetype = 1, colour = 2, size = 0.25) +
    scale_colour_manual(name = "", labels = c(variable.name), values = c("Variable" = "darkblue")) +
    theme_grey() +
    theme(legend.position = "top")
#> Warning: Removed 1 row(s) containing missing values (geom_path).
#> Warning: Removed 1 rows containing missing values (geom_point).


3.5 İndeks Ayarlaması

  • Örnek olması açısından World Bank’ten “Türkiye için Tüketici Fiyatları İndeksi (2010 Baz Yılı)” verisini indirip yükleyelim.
  • Daha sonra indirip yüklediğimiz bu veriyi temizleyelim ve düzenleyelim.
  • Daha sonra temizlenmiş ve düzenlenmiş veri üzerinden yeni bir baz yılı belirleyip bu baz yila göre indeks ayarlaması yapalım.
  • Son olarak yeni baz yılı ile hesaplanmış veriyi grafiğe dökelim.
WDIsearch(string = "consumer.*price.*index", field = "name", short = TRUE, cache = NULL) ## Olası seriler ve kodları. Biz "FP.CPI.TOTL" Consumer price index (2010 = 100) datasını kullanacağız. 2010 baz yılı kullanılıyor.
#>      indicator             name                                         
#> [1,] "2.01.03.01.prcpbase" "Consumer price index base year"             
#> [2,] "EP.CPI.1996"         "Consumer Price Index in 42 cities base 1996"
#> [3,] "EP.CPI.2002"         "Consumer Price Index in 45 cities base 2002"
#> [4,] "EP.CPI.2007"         "Consumer Price Index in 66 cities base 2007"
#> [5,] "EP.CPI.2012"         "Consumer Price Index in 82 cities base 2012"
#> [6,] "FP.CPI.TOTL"         "Consumer price index (2010 = 100)"          
#> [7,] "GFDD.OE.01"          "Consumer price index (2010=100, December)"  
#> [8,] "GFDD.OE.02"          "Consumer price index (2010=100, average)"
data <- WDI(country = c("TR"), indicator = "FP.CPI.TOTL", start = 1960, end = 2019, extra = FALSE)  ## Bir önceki kodda belirlediğimiz indikatör ismini ve ülke kısaltmasını kullanıyoruz. Datanın başlangıç ve bitiş tarihlerini de ayrı ayrı belirtiyoruz.
data ## Datanın yapısını inceleyelim.

data <- data[, c("year", "FP.CPI.TOTL")] ## İstediğimiz değişkenleri belirtiyoruz.
colnames(data) <- c("Year", "CPI.2010") ## Değişkenlere yeni isimler veriyoruz.
data$Date <- as.Date(paste(data$Year, "1", "1", sep = "-")) ## Date adlı yeni bir değişken oluşturuyoruz.
data <- data[, c("Date", "Year", "CPI.2010")] ## Değişkenleri sütun olarak sıralıyoruz.
data <- data[order(data$Date, data$Year, decreasing = FALSE, na.last = FALSE), ] ## Datayı tarihe göre sıralıyoruz.
rownames(data) <- 1:nrow(data) ## Satır sayılarını sıralıyoruz.
data ## Datanın yapısını inceleyelim.

# Yeni bir baz yılına göre (2019 Baz Yılı) indeksi tekrar hesaplıyoruz.
data$CPI.2019 <- (data$CPI.2010/data[data$Year == 2019, "CPI.2010"]) * 100
data ## Datanın yapısını inceleyelim.

# Grafik
temp <- data
variable <- "CPI.2019"
variable.name <- "Tüketici Fiyatları İndeksi (2019 Baz Yılı)"

ggplot(temp) +
    geom_line(aes(x = Date, y = temp[ , variable], colour = "Variable"), linetype = 1, size = 1) +
    geom_point(aes(x = Date, y = temp[ , variable], colour = "Variable"), size = 1) +
    xlab("Zaman (Yıl)") + ylab(variable.name) +
    # labs(title = "Başlık") + ## Grafik için isterseniz başlık eklenebilir.
    scale_x_date(date_breaks = "5 year", date_labels = "%Y") +
    geom_hline(aes(yintercept = 0), show.legend = FALSE, linetype = 1, colour = 2, size = 0.25) +
    scale_colour_manual(name = "", labels = c(variable.name), values = c("Variable" = "darkblue")) +
    theme_grey() +
    theme(legend.position = "top")


3.6 Matematiksel Transformasyon

  • Örnek olması açısından Yahoo Finance’ten “Döviz Kuru (TL/USD)” verisini indirip yükleyelim.
  • Daha sonra indirip yüklediğimiz bu veriyi temizleyelim ve düzenleyelim.
  • Daha sonra temizlenmiş ve düzenlenmiş veri üzerinde logaritmik transformasyon ve Box-Cox transformasyonu uygulayalım.
  • Son olarak düzey formundaki, logaritmik formdaki ve Box-Cox transformasyonu ile değiştirilmiş veriyi grafiğe dökelim.
loadSymbols(Symbols = "TRY=X", periodicity = "daily", return.class = "data.frame") ## Datanın indirilmesi.
#> Warning: TRY=X contains missing values. Some functions will not work if objects contain
#> missing values in the middle of the series. Consider using na.omit(), na.approx(),
#> na.fill(), etc to remove or replace them.
#> [1] "TRY=X"
data <- data.frame(Date = rownames(`TRY=X`), Close = `TRY=X`$`TRY=X.Close`, stringsAsFactors = FALSE) ## Datanın data.frame olarak kaydedilmesi.
data$Date <- as.Date(data$Date) ## Date kategori olarak değiştirildi.
data <- data[order(data$Date, decreasing = FALSE, na.last = FALSE), ] ## Datayı tarihe göre sıralıyoruz.
rownames(data) <- 1:nrow(data) ## Satır sayılarını sıralıyoruz.
data ## Datanın yapısını inceleyelim.

# Logaritmik transformasyon.
data$Ln.Close <- log(data$Close)

# Box-Cox transformasyonu.
value <- data$Close
## Box-cox transformasyonu ile bulunan lambda değerine göre ham veri değiştiriliyor: Eğer lambda = 1 ise transformasyona gerek yok, eğer lambda == 0 ise ln(x), ve eğer lambda farklı bir değer ise (x^lambda - 1)/lambda.
s.lambda <- forecast::BoxCox.lambda(value, method = c("loglik"), lower = -2, upper = 2) ## Box-cox transformasyonu sonucunda bulunan lambda değeri. method = c("guerrero") kriteri de kullanılabilir. Genelde kullanılan alt limit -2 ve üst limit ise 2'dir.
if(s.lambda == 1) { ## Lambda = 1.
    value.boxcox <- value
    message("Box-Cox transformasyonu sonucu: Transformasyona gerek yok.")
} else if(s.lambda == 0) { ## Lambda = 0.
    value.boxcox <- log(value)
    message("Box-Cox transformasyonu sonucu: Logaritmik Transformasyon yapıldı.")
} else { ## Lambda farklı bir değer ise.
    value.boxcox <- (value^s.lambda - 1)/s.lambda
    message(paste0("Box-Cox transformasyonu sonucu: λ = ", round(s.lambda, 2), " kullanılarak Box-Cox transformasyonu yapıldı."))
}
#> Box-Cox transformasyonu sonucu: λ = -0.7 kullanılarak Box-Cox transformasyonu yapıldı.
data$Box.Cox.Close <- value.boxcox
data ## Datanın yapısını inceleyelim.

# Düzey Formu: Grafik
temp <- data
variable <- "Close"
variable.name <- "Döviz Kuru (TL/USD)"

ggplot(temp) +
    geom_line(aes(x = Date, y = temp[ , variable], colour = "Variable"), linetype = 1, size = 1) +
    xlab("Zaman (Gün)") + ylab(variable.name) +
    # labs(title = "Başlık") + ## Grafik için isterseniz başlık eklenebilir.
    scale_x_date(date_breaks = "1 year", date_labels = "%Y") +
    scale_colour_manual(name = "", labels = c(variable.name), values = c("Variable" = "darkblue")) +
    theme_grey() +
    theme(legend.position = "top")


# Logaritmik Form: Grafik
temp <- data
variable <- "Ln.Close"
y.lab <- "Ln Döviz Kuru (TL/USD)"
variable.name <- "Logaritmik Transformasyon ile Döviz Kuru (TL/USD)"

ggplot(temp) +
    geom_line(aes(x = Date, y = temp[ , variable], colour = "Variable"), linetype = 1, size = 1) +
    xlab("Zaman (Gün)") + ylab(y.lab) +
    # labs(title = "Başlık") + ## Grafik için isterseniz başlık eklenebilir.
    scale_x_date(date_breaks = "1 year", date_labels = "%Y") +
    scale_colour_manual(name = "", labels = c(variable.name), values = c("Variable" = "darkblue")) +
    theme_grey() +
    theme(legend.position = "top")


# Box-Cox Transformasyonu: Grafik
temp <- data
variable <- "Box.Cox.Close"
y.lab <- paste0("Box-Cox $(\\lambda = ", round(s.lambda, 2), ")$ ile Döviz Kuru (TL/USD)")
variable.name <- paste0("Box-Cox Transformasyonu ile Döviz Kuru (TL/USD)")

ggplot(temp) +
    geom_line(aes(x = Date, y = temp[ , variable], colour = "Variable"), linetype = 1, size = 1) +
    xlab("Zaman (Gün)") + ylab(latex2exp::TeX(y.lab)) +
    # labs(title = "Başlık") + ## Grafik için isterseniz başlık eklenebilir.
    scale_x_date(date_breaks = "1 year", date_labels = "%Y") +
    scale_colour_manual(name = "", labels = c(variable.name), values = c("Variable" = "darkblue")) +
    theme_grey() +
    theme(legend.position = "top")

3.7 Gecikmeli Değişkenler

  • Örnek olması açısından World Bank’ten “Amerika için Satın Alma Gücü Paritesine Göre Kişi Başı Reel Gayri Safi Yurtiçi Hasıla (2017 Baz Yılı)” verisini USD cinsinden indirip yükleyelim.
  • Daha sonra indirip yüklediğimiz bu veriyi temizleyelim ve düzenleyelim.
  • Daha sonra temizlenmiş ve düzenlenmiş veri üzerinden \(y_{t-s}\) gibi gecikmeli zaman serisi değişkenlerini hesaplayalım.
  • Son olarak cari dönemdeki değişken \(y_{t}\) ve tüm gecikmeli değişkenleri bir tabloda gösterelim.
WDIsearch(string = "gdp.*capita.*constant", field = "name", short = TRUE, cache = NULL) ## Olası seriler ve kodları. Biz "NY.GDP.PCAP.PP.KD" GDP per capita, PPP (constant 2017 international $) datasını kullanacağız. 2017 baz yılı kullanılıyor.
#>      indicator              name                                                  
#> [1,] "6.0.GDPpc_constant"   "GDP per capita, PPP (constant 2011 international $) "
#> [2,] "NY.GDP.PCAP.KD"       "GDP per capita (constant 2010 US$)"                  
#> [3,] "NY.GDP.PCAP.KN"       "GDP per capita (constant LCU)"                       
#> [4,] "NY.GDP.PCAP.PP.KD"    "GDP per capita, PPP (constant 2017 international $)" 
#> [5,] "NY.GDP.PCAP.PP.KD.87" "GDP per capita, PPP (constant 1987 international $)"
data <- WDI(country = c("US"), indicator = c("NY.GDP.PCAP.PP.KD"), start = 1990, end = 2019, extra = FALSE) ## Bir önceki kodda belirlediğimiz indikatör ismini ve ülke kısaltmasını kullanıyoruz. Datanın başlangıç ve bitiş tarihlerini de ayrı ayrı belirtiyoruz.
data ## Datanın yapısını inceleyelim.

data <- data[, c("year", "NY.GDP.PCAP.PP.KD")] ## İstediğimiz değişkenleri belirtiyoruz.
colnames(data) <- c("Year", "GDP") ## Değişkenlere yeni isimler veriyoruz. Tablo sütunlarının iyi görünmesi için satın alma gücü paritesine göre kişi başı reel gayri safi yurtiçi hasıla özellikle GDP olarak gösterildi.
data$Date <- as.Date(paste(data$Year, "1", "1", sep = "-")) ## Date adlı yeni bir değişken oluşturuyoruz.
data <- data[, c("Date", "Year", "GDP")] ## Değişkenleri sütun olarak sıralıyoruz.
data <- data[order(data$Date, data$Year, decreasing = FALSE, na.last = FALSE), ] ## Datayı tarihe göre sıralıyoruz.
rownames(data) <- 1:nrow(data) ## Satır sayılarını sıralıyoruz.
data ## Datanın yapısını inceleyelim.

# Tablo
temp <- data
temp$GDP <- round(temp$GDP, 0) ## Tablonun daha iyi görünmesi için sayılar yuvarlanıyor.
temp$t <- 1:nrow(temp) ## Trend değişkeni ya da t indeks değeri ekleniyor.
temp <- temp[, c("Year", "t", "GDP")] ## Değişkenler sıraya dizildi.
temp$GDP.t1 <- ecm::lagpad(x = temp$GDP, k = 1) ## 1. Gecikme oluşturuldu.
temp$GDP.t2 <- ecm::lagpad(x = temp$GDP, k = 2) ## 2. Gecikme oluşturuldu.
temp$GDP.t3 <- ecm::lagpad(x = temp$GDP, k = 3) ## 3. Gecikme oluşturuldu.
temp$GDP.t4 <- ecm::lagpad(x = temp$GDP, k = 4) ## 4. Gecikme oluşturuldu.
data <- temp
data

4 Mevsimsel Grafikler

  • Bu bölümde zaman serisi verisindeki mevsimsel örüntünün görsel olarak belirlenmesinde kullanılan mevsimsel grafik ve mevsimsel alt seri grafiği gösterilecektir.
  • Örnek olması açısından fpp2 R paketinden “Avustralya Elektrik Üretimi (milyar kWh)” verisini yükleyelim.
    • fpp2 R paketinden yüklemek istediğimiz verinin ismi qauselec’tir.
  • Daha sonra yüklediğimiz bu veriyi temizleyelim, düzenleyelim ve grafiğe dökelim.
  • Son olarak temizlenmiş ve düzenlemiş veriyi kullanarak mevsimsel grafik ve mevsimsel altseri grafiğini gösterelim.
data(qauselec) ## Datayı yüklüyoruz.
data <- qauselec ## Yüklediğimiz datayı "data" ismi ile kaydediyoruz.
head(data, 20) ## Datanın yapısını inceleyelim.
#>       Qtr1  Qtr2  Qtr3  Qtr4
#> 1956 3.923 4.436 4.806 4.418
#> 1957 4.339 4.811 5.259 4.735
#> 1958 4.608 5.196 5.609 4.977
#> 1959 4.883 5.744 6.035 5.514
#> 1960 5.387 6.211 6.659 5.983
data <- data.frame(Date = as.Date(date_decimal(as.numeric(time(data)))), Elec.Prod = as.matrix(data), stringsAsFactors = FALSE) ## Yüklediğimiz data time series formatında olduğu için bu datayı data.frame formatına çeviriyoruz.
data <- data[order(data$Date, decreasing = FALSE, na.last = FALSE), ] ## Datayı tarihe göre sıralıyoruz.
rownames(data) <- 1:nrow(data) ## Satır sayılarını sıralıyoruz.

# Grafik
temp <- data
variable <- "Elec.Prod"
variable.name <- "Avustralya Elektrik Üretimi (milyar kWh)"

ggplot(temp) +
    geom_line(aes(x = Date, y = temp[ , variable], colour = "Variable"), linetype = 1, size = 1) +
    xlab("Zaman (Çeyreklik)") + ylab(variable.name) +
    # labs(title = "Başlık") + ## Grafik için isterseniz başlık eklenebilir.
    scale_x_date(date_breaks = "5 year", date_labels = "%Y") +
    scale_colour_manual(name = "", labels = c(variable.name), values = c("Variable" = "darkblue")) +
    theme_grey() +
    theme(legend.position = "top")


# Mevsimsel Grafik
variable <- "Elec.Prod"
temp <- ts(data = data[, variable], start = c(year(data$Date[1]), month(data$Date[1])), frequency = 4) ## Mevsimsel grafikleri oluşturabilmek için datanın zaman serisi objesi (time series) olması lazım. Bu nedenle dönüşüm yapıldı.
temp <- window(temp, start = NULL, end = c(2009, 4)) ## 2010 yılına ait veri tam olmadığı için çıkartılıyor.
variable.name <- "Avustralya Elektrik Üretimi (milyar kWh)"
title <- "Avustralya Elektrik Üretimi (milyar kWh): Mevsimsel Grafik"
quarter.labels <- c("Ç1", "Ç2", "Ç3", "Ç4")

ggseasonplot(x = temp, season.labels = quarter.labels, year.labels = TRUE, year.labels.left = TRUE, continuous = FALSE, polar = FALSE, labelgap = 0.04) + ## year.labels = FALSE ve year.labels.left = FALSE olduğunda legend gösterilmez onun yerine yıllara ait etiket gösterilir.
    xlab("Zaman (Çeyreklik)") + ylab(variable.name) +
    labs(title = title) +
    theme_grey()


# Mevsimsel Alt Seri Grafiği
variable <- "Elec.Prod"
temp <- ts(data = data[, variable], start = c(year(data$Date[1]), month(data$Date[1])), frequency = 4) ## Mevsimsel grafikleri oluşturabilmek için datanın zaman serisi objesi (time series) olması lazım. Bu nedenle dönüşüm yapıldı.
temp <- window(temp, start = NULL, end = c(2009, 4)) ## 2010 yılına ait veri tam olmadığı için çıkartılıyor.
variable.name <- "Avustralya Elektrik Üretimi (milyar kWh)"
title <- "Avustralya Elektrik Üretimi (milyar kWh): Mevsimsel Altseri Grafiği"
quarter.labels <- c("Ç1", "Ç2", "Ç3", "Ç4")

ggsubseriesplot(temp) +
    xlab("Zaman (Çeyreklik)") + ylab(variable.name) +
    labs(title = title) +
    scale_x_continuous(breaks = 1:frequency((temp)), labels = quarter.labels) +
    theme_grey()
#> Scale for 'x' is already present. Adding another scale for 'x', which will replace the
#> existing scale.


5 Klasik Dekompozizasyon

  • Bu bölümde zaman serileri analizinde yaygın olarak kullanılan klasik dekompozizasyon methodu iki farklı yöntem ile gösterilecektir: toplamsal dekompozizasyon ve çarpımsal dekompozizasyon.

5.1 Toplamsal Dekompozizasyon

  • Mevsimsel dalgalanmaların büyüklüğü veya trend etrafındaki dalgalanmalar, zaman serisinin düzeyine göre değişmiyorsa, toplamsal dekompozizasyon en uygun olan yöntemdir.
  • Örnek olması açısından “İstanbul’a Verilen Temiz Su Miktarları” verisini yükleyelim.
  • Daha sonra yüklediği bu veriyi temizleyelim ve düzenleyelim.
  • Son olarak temizlenmiş ve düzenlemiş verinin toplamsal klasik dekompozizasyonunu grafiğe dökelim.
file.path <- "clean-water.xlsx" ## Data dosyasının ismi ve uzantısı.

# Ham datanın yüklenmesi
data <- read_excel(path = file.path, sheet = 3, range = cell_limits(c(1, 1), c(NA, NA)), col_names = TRUE, col_types = "text") ## Yüklediğimiz datayı tibble formatında kaydediyoruz.
data <- as.data.frame(data, stringsAsFactors = FALSE) ## Datayı data.frame formatına çeviriyoruz.
colnames(data)[1] <- "Month" ## İlk sütun ismini değiştiriyoruz.
data$Month <- 1:12 ## İlk sütundaki hücrelere ay ismi yerine rakam veriyoruz.

# Datanın dönüştürülmesi.
data <- reshape2::melt(data, id.vars = c("Month"), variable_name = "value")

# Bazı değişiklikler.
data <- dplyr::rename(data, Year = variable)
data <- dplyr::rename(data, Clean.Water = value)
data$Year <- as.numeric(as.character(data$Year))
data$Clean.Water <- as.numeric(data$Clean.Water)
data$Date <- as.Date(paste(data$Year, data$Month, "1", sep = "-")) ## Date adlı tarihi belirten yeni bir değişken oluşturuyoruz.
data <- data[, c("Date", "Year", "Month", "Clean.Water")] ## İstediğimiz değişkenleri belirtiyoruz.
data <- data[data$Year != 2019, ] ## 2019 datasının son gözleminde bir problem olduğu için 2019 yılını siliyoruz.
data <- data[order(data$Date, decreasing = FALSE, na.last = FALSE), ] ## Datayı tarihe göre sıralıyoruz.
rownames(data) <- 1:nrow(data) ## Satır sayılarını sıralıyoruz.

# Grafik
temp <- data
variable <- "Clean.Water"
colnames(temp)[colnames(temp) == variable] <- "y"
variable.name <- "İstanbul'a Verilen Temiz Su Miktarı (Ton)"
title <- "İstanbul'a Verilen Temiz Su Miktarı (Ton): Toplamsal Klasik Dekompozizasyon"
frequency <- 12 ## Datanın frekansı.

ggsdc(temp, aes(x = Date, y = y), frequency = frequency, method = "decompose", type = "additive", facet.titles = c("Veri", "Trend", "Mevsimsellik", "Kalıntı")) +
    geom_line(colour = "darkblue", size = 1) +
    xlab("Zaman (Çeyreklik)") + ylab(variable.name) +
    labs(title = title) +
    scale_x_date(date_breaks = "1 year", date_labels = "%Y") +
    theme_grey()
#> Warning: Removed 6 row(s) containing missing values (geom_path).


5.2 Çarpımsal Dekompozizasyon

  • Mevsimsellikteki varyasyon veya trend etrafındaki varyasyon, zaman serisinin seviyesiyle orantılı göründüğünde, çarpımsal dekompozizasyon daha uygundur.
  • Örnek olması açısından fpp2 R paketinden “Avustralya Elektrik Üretimi (milyar kWh)” verisini yükleyelim.
    • fpp2 R paketinden yüklemek istediğimiz verinin ismi qauselec’tir.
  • Daha sonra yüklediği bu veriyi temizleyelim ve düzenleyelim.
  • Son olarak temizlenmiş ve düzenlemiş verinin çarpımsal klasik dekompozizasyonunu grafiğe dökelim.
data(qauselec) ## Datayı yüklüyoruz.
data <- qauselec ## Yüklediğimiz datayı "data" ismi ile kaydediyoruz.
head(data, 20) ## Datanın yapısını inceleyelim.
#>       Qtr1  Qtr2  Qtr3  Qtr4
#> 1956 3.923 4.436 4.806 4.418
#> 1957 4.339 4.811 5.259 4.735
#> 1958 4.608 5.196 5.609 4.977
#> 1959 4.883 5.744 6.035 5.514
#> 1960 5.387 6.211 6.659 5.983
data <- data.frame(Date = as.Date(date_decimal(as.numeric(time(data)))), Elec.Prod = as.matrix(data), stringsAsFactors = FALSE) ## Yüklediğimiz data time series formatında olduğu için bu datayı data.frame formatına çeviriyoruz.
data <- data[order(data$Date, decreasing = FALSE, na.last = FALSE), ] ## Datayı tarihe göre sıralıyoruz.
rownames(data) <- 1:nrow(data) ## Satır sayılarını sıralıyoruz.

# Grafik
temp <- data
variable <- "Elec.Prod"
colnames(temp)[colnames(temp) == variable] <- "y"
variable.name <- "Avustralya Elektrik Üretimi (milyar kWh)"
title <- "Avustralya Elektrik Üretimi (milyar kWh): Çarpımsal Klasik Dekompozizasyon"
frequency <- 4 ## Datanın frekansı.

ggsdc(temp, aes(x = Date, y = y), frequency = frequency, method = "decompose", type = "multiplicative", facet.titles = c("Veri", "Trend", "Mevsimsellik", "Kalıntı")) +
    geom_line(colour = "darkblue", size = 1) +
    xlab("Zaman (Çeyreklik)") + ylab(variable.name) +
    labs(title = title) +
    scale_x_date(date_breaks = "5 year", date_labels = "%Y") +
    theme_grey()
#> Warning: Removed 2 row(s) containing missing values (geom_path).


6 Hareketli Ortalama

  • Bu bölümde zaman serileri analizinde sıkça kullanılan ve klasik dekompozizasyonun ilk adımı olan hareketli ortalama (moving average) hesabının nasıl yapıldığı gösterilecektir.
  • Örnek olması açısından “İstanbul’a Verilen Temiz Su Miktarları” verisini yükleyelim.
  • Daha sonra yüklediğimiz bu veriyi temizleyelim ve düzenleyelim.
  • Daha sonra temizlenmiş ve düzenlenmiş veri üzerinden farklı derecelerden hareketli ortalamaları hesaplayalım: 3-MA, 5-MA, 7-MA ve 9-MA.
    • Hesaplamalarda hareketli ortalama merkezden alınmıştır. Fakat ilgili kodda ufak bir değişiklik ile sola ya da sağa dayalı hareketli ortalama da hesaplanabilir.
  • Son olarak merkezden hesaplanmış hareketli ortalama verisini bir tabloda gösterelim ve grafiğe dökelim.
file.path <- "clean-water.xlsx" ## Data dosyasının ismi ve uzantısı.

# Ham datanın yüklenmesi
data <- read_excel(path = file.path, sheet = 3, range = cell_limits(c(1, 1), c(NA, NA)), col_names = TRUE, col_types = "text") ## Yüklediğimiz datayı tibble formatında kaydediyoruz.
data <- as.data.frame(data, stringsAsFactors = FALSE) ## Datayı data.frame formatına çeviriyoruz.
colnames(data)[1] <- "Month" ## İlk sütun ismini değiştiriyoruz.
data$Month <- 1:12 ## İlk sütundaki hücrelere ay ismi yerine rakam veriyoruz.

# Datanın dönüştürülmesi.
data <- reshape2::melt(data, id.vars = c("Month"), variable_name = "value")

# Bazı değişiklikler.
data <- dplyr::rename(data, Year = variable)
data <- dplyr::rename(data, Clean.Water = value)
data$Year <- as.numeric(as.character(data$Year))
data$Clean.Water <- as.numeric(data$Clean.Water)
data$Date <- as.Date(paste(data$Year, data$Month, "1", sep = "-")) ## Date adlı tarihi belirten yeni bir değişken oluşturuyoruz.
data <- data[, c("Date", "Year", "Month", "Clean.Water")] ## İstediğimiz değişkenleri belirtiyoruz.
data <- data[data$Year != 2019, ] ## 2019 datasının son gözleminde bir problem olduğu için 2019 yılını siliyoruz.
data <- data[order(data$Date, decreasing = FALSE, na.last = FALSE), ] ## Datayı tarihe göre sıralıyoruz.
rownames(data) <- 1:nrow(data) ## Satır sayılarını sıralıyoruz.

# Hareketli ortalama hesabı.
temp <- data
variable <- "Clean.Water"
temp$`3-MA` <- slider::slide_dbl(.x = temp[, variable], .f = mean, .before = 1, .after = 1, .complete = TRUE) ## 3-MA (3 Dönemlik hareketli ortalama) - Ortalama merkezden alınmıştır.
temp$`5-MA` <- slider::slide_dbl(.x = temp[, variable], .f = mean, .before = 2, .after = 2, .complete = TRUE) ## 5-MA (5 Dönemlik hareketli ortalama) - Ortalama merkezden alınmıştır.
temp$`7-MA` <- slider::slide_dbl(.x = temp[, variable], .f = mean, .before = 3, .after = 3, .complete = TRUE) ## 5-MA (7 Dönemlik hareketli ortalama) - Ortalama merkezden alınmıştır.
temp$`9-MA` <- slider::slide_dbl(.x = temp[, variable], .f = mean, .before = 4, .after = 4, .complete = TRUE) ## 9-MA (9 Dönemlik hareketli ortalama) - Ortalama merkezden alınmıştır.
temp.table <- temp ## Hareketli ortalama tablosunda kullanılacak data.

temp1 <- reshape2::melt(temp, id.vars = c(grep("(Date)|(Year)|(Day)|(Week)|(Month)", colnames(temp), value = TRUE)), measure.vars = c(grep("(MA)", colnames(temp), value = TRUE)), variable_name = "Variable", na.rm = FALSE)
temp.figure <- temp1 ## Hareketli ortalama grafiğinde kullanılacak data.

# Tablo
temp <- temp.table
temp$`3-MA` <- round(temp$`3-MA`, 0) ## Tablonun daha iyi görünmesi için sayılar yuvarlanıyor.
temp$`5-MA` <- round(temp$`5-MA`, 0) ## Tablonun daha iyi görünmesi için sayılar yuvarlanıyor.
temp$`7-MA` <- round(temp$`7-MA`, 0) ## Tablonun daha iyi görünmesi için sayılar yuvarlanıyor.
temp$`9-MA` <- round(temp$`9-MA`, 0) ## Tablonun daha iyi görünmesi için sayılar yuvarlanıyor.
temp <- temp[, -1] ## Date değişkeni çıkarılıyor.
temp

# Grafik
temp <- data
temp1 <- temp.figure
variable <- "Clean.Water"
variable.name <- "İstanbul'a Verilen Temiz Su Miktarı (Ton)"
title <- "İstanbul'a Verilen Temiz Su Miktarı (Ton): Hareketli Ortalama (m-MA)"

ggplot(temp1, aes(x = Date, y = value)) +
    geom_line(colour = "#FF6666", size = 0.5, linetype = 1) +
    facet_wrap(variable ~ ., scales = "free_y", strip.position = "top") +
    geom_line(data = temp, aes(x = Date, y = Clean.Water), colour = "darkblue", size = 0.5) +
    xlab("Zaman (Ay)") + ylab(variable.name) +
    labs(title = title) +
    scale_x_date(date_breaks = "2 year", date_labels = "%Y") +
    theme_grey()
#> Warning: Removed 5 row(s) containing missing values (geom_path).


7 Otokorelasyon Fonksiyonu

  • Bu bölümde bir zaman serisinin bağımlılık yapısının incelenmesinde kullanılan ve örneklem otokorelasyon fonksiyonu (SACF) gösterilecektir.
  • Örnek olması açısından zaman serileri analizinde sıkça kullanılan ve stokastik bir süreç olan “Pür Rassal Süreç” verisinin örneklem otokorelasyon fonksiyonunu inceleyelim.
    • İlgili veri: Simüle edilmiş bir pür rassal süreç örneği kullanılmıştır.
  • Daha sonra simüle ettiğimiz bu veriyi temizleyelim ve düzenleyelim.
  • Daha sonra temizlenmiş ve düzenlenmiş veriyi grafiğe dökelim.
  • Son olarak temizlenmiş ve düzenlenmiş verideki otokorelasyon varlığını belirlemek için 2 farklı grafik kullanalım:
    • \(WN_{t}\) ve \(WN_{t-s}\) arasındaki grafik.
    • Örneklem otokorelasyon fonksiyonunun grafiği.
n <- 1000 ## Gozlem sayisi.
WN <- arima.sim(model = list(order = c(0, 0, 0)), n = n) ## Simüle edilmiş pür rassal süreç verisi. Zaman serisi objesi olduğunu ve plot(WN) kullanılarak hemen grafiğe dökülebileceğini unutmayın.
str(WN)
#>  Time-Series [1:1000] from 1 to 1000: 0.429 0.506 -0.575 -0.547 -0.564 ...
mean(WN) ## Pür rassal sürecin ortalaması sıfırdır. Simüle edilmiş veri olduğundan sıfıra yakın çıkıyor.
#> [1] -0.026213949
var(WN) ## Gözlem sayısı yeteri kadar büyük olduğunda merkezi limit teorimi kullanılarak pür rassal sürecin standart normal yaptığı bilinmektedir. Simüle veride de bu durum gözlenmiştir.
#> [1] 0.99080299

data <- data.frame(Date = 1:length(WN), White.Noise = as.matrix(WN), stringsAsFactors = FALSE)
data <- data[order(data$Date, decreasing = FALSE, na.last = FALSE), ] ## Datayı tarihe göre sıralıyoruz.
rownames(data) <- 1:nrow(data) ## Satır sayılarını düzenliyoruz.
data ## Datanın yapısını inceleyelim.

# Grafik
temp <- data
variable <- "White.Noise"
variable.name <- "Simüle Edilmiş Pür Rassal Süreç"

ggplot(temp) +
    geom_line(aes(x = Date, y = temp[ , variable], colour = "Variable"), linetype = 1, size = 1) +
    xlab("Zaman") + ylab(variable.name) +
    scale_y_continuous(breaks = pretty(temp[ , variable])) +
    geom_hline(aes(yintercept = 0), show.legend = FALSE, linetype = 1, colour = 2, size = 0.25) +
    scale_colour_manual(name = "", labels = c(variable.name), values = c("Variable" = "darkblue")) +
    theme_grey() +
    theme(legend.position = "top")


# WN(t) vs WN(t-s) için bazı düzenlemeler.
s <- 1 ## Seçili gecikme uzunluğunu belirliyoruz.
WN <- c(WN) ## Zaman serisini normal bir vektöre çeviriyoruz.
WNt <- WN[(1 + s):length(WN)] ## WN(t). Cari dönem verisi.
WNts <- WN[1:(length(WN) - s)] ## WN(t-s). s gecikme önceki veri.
data <- data.frame(WNt = WNt, WNts = WNts, stringsAsFactors = FALSE)

# WN(t) vs WN(t-s) grafiği.
temp <- data

ggplot(temp) +
    geom_point(aes(x = WNt, y = WNts, colour = "Variable"), size = 3, colour = "darkblue") +
    xlab(paste0("wn_t")) + ylab(paste0("wn_t-", s)) +
    labs(title = paste0("Simüle Edilmiş Pür Rassal Süreç wn_t vs wn_t-", s)) +
    geom_hline(aes(yintercept = 0), show.legend = FALSE, linetype = 1, colour = 2, size = 0.25) +
    geom_vline(aes(xintercept = 0), show.legend = FALSE, linetype = 1, colour = 2, size = 0.25) +
    theme_grey()


# WN'nin SACF grafigi
temp <- WN
title <- "Simüle Edilmiş Pür Rassal Süreç: SACF"

ggAcf(x = temp, ci = 0.95, lag.max = 10, type = "correlation", plot = TRUE, demean = TRUE) +
    xlab("Gecikme Değeri") + ylab("Örneklem Otokorelasyon Katsayısı") +
    labs(title = title) +
    theme_grey()